#include "mainwindow.h"
#include <ros/network.h>
MainWindow::MainWindow(ros::NodeHandle *node,QWidget *parent) :
        QMainWindow(parent),
  ui(new Ui::MainWindow)

{

  ui->setupUi(this);
    widget = new QWidget(this);
    this->setCentralWidget(widget);

    vbox = new QVBoxLayout;
    vbox1 = new QVBoxLayout;

    label1 = new QLabel("基本信息");
    label1_1 = new QLabel("运动");
    label1_2 = new QLabel("当前运动模式：");
    label1_3 = new QLabel("当前位置：");
    label1_4 = new QLabel("当前角度：");
    label1_5 = new QLabel("当前速度：");
    label1_6 = new QLabel("当前角速度：");
    label1_7 = new QLabel(" ");

    label2_1 = new QLabel("状态");
    label2_2 = new QLabel("当前版本信息：");
    label2_3 = new QLabel("当前任务状态：");
    label2_4 = new QLabel("当前行驶优先级：");
    label2_5 = new QLabel("当前充电状态：");
    label2_6 = new QLabel("当前顶升状态：");
    label2_7 = new QLabel("当前托盘状态：");

    label3_1 = new QLabel("电池");
    label3_2 = new QLabel("电池电压：");
    label3_3 = new QLabel("电池温度：");
    label3_4 = new QLabel("电池电量：");
    label3_5 = new QLabel("电池电流：");
    label3_6 = new QLabel(" ");
    label3_7 = new QLabel(" ");


    label1_1_2 = new QLabel(this);
    timer1 = new QTimer(this);
    connect(timer1, SIGNAL(timeout()),
            this, SLOT(updateTime()));
    timer1->start(1000);


    label1_2_2 = new QLabel(this);
    timer2 = new QTimer(this);
    connect(timer2, SIGNAL(timeout()),
            this, SLOT(updateNum()));
    timer2->start(300);

    label1_3_2 = new QLabel(this);
    timer3 = new QTimer(this);
    connect(timer3, SIGNAL(timeout()),
            this, SLOT(onUpdate()));
    timer3->start(1000);
    subscriber = node->subscribe("cpptopic", 1000, &MainWindow::topicCallback, this);


    label1_4_2 = new QLabel("  ");
    label1_5_2 = new QLabel("  ");
    label1_6_2 = new QLabel("  ");
    label1_7_2 = new QLabel("  ");

    label2_1_2 = new QLabel("  ");
    label2_2_2 = new QLabel("  ");
    label2_3_2 = new QLabel("  ");
    label2_4_2 = new QLabel("  ");
    label2_5_2 = new QLabel("  ");
    label2_6_2 = new QLabel("  ");
    label2_7_2 = new QLabel("  ");

    label3_1_2 = new QLabel("  ");
    label3_2_2 = new QLabel("  ");
    label3_3_2 = new QLabel("  ");
    label3_4_2 = new QLabel("  ");
    label3_5_2 = new QLabel("  ");
    label3_6_2 = new QLabel("  ");
    label3_7_2 = new QLabel("  ");


    vbox1->addWidget(label1);

    hbox1 =new QHBoxLayout;
    vbox1_1 = new QVBoxLayout;
    vbox1_1->addWidget(label1_1);
    vbox1_1->addWidget(label1_2);
    vbox1_1->addWidget(label1_3);
    vbox1_1->addWidget(label1_4);
    vbox1_1->addWidget(label1_5);
    vbox1_1->addWidget(label1_6);
    vbox1_1->addWidget(label1_7);

    vbox1_1_2 = new QVBoxLayout;
    vbox1_1_2->addWidget(label1_1_2);
    vbox1_1_2->addWidget(label1_2_2);
    vbox1_1_2->addWidget(label1_3_2);
    vbox1_1_2->addWidget(label1_4_2);
    vbox1_1_2->addWidget(label1_5_2);
    vbox1_1_2->addWidget(label1_6_2);
    vbox1_1_2->addWidget(label1_7_2);

    vbox1_2 = new QVBoxLayout;
    vbox1_2->addWidget(label2_1);
    vbox1_2->addWidget(label2_2);
    vbox1_2->addWidget(label2_3);
    vbox1_2->addWidget(label2_4);
    vbox1_2->addWidget(label2_5);
    vbox1_2->addWidget(label2_6);
    vbox1_2->addWidget(label2_7);

    vbox1_2_2 = new QVBoxLayout;
    vbox1_2_2->addWidget(label2_1_2);
    vbox1_2_2->addWidget(label2_2_2);
    vbox1_2_2->addWidget(label2_3_2);
    vbox1_2_2->addWidget(label2_4_2);
    vbox1_2_2->addWidget(label2_5_2);
    vbox1_2_2->addWidget(label2_6_2);
    vbox1_2_2->addWidget(label2_7_2);

    vbox1_3 = new QVBoxLayout;
    vbox1_3->addWidget(label3_1);
    vbox1_3->addWidget(label3_2);
    vbox1_3->addWidget(label3_3);
    vbox1_3->addWidget(label3_4);
    vbox1_3->addWidget(label3_5);
    vbox1_3->addWidget(label3_6);
    vbox1_3->addWidget(label3_7);

    vbox1_3_2 = new QVBoxLayout;
    vbox1_3_2->addWidget(label3_1_2);
    vbox1_3_2->addWidget(label3_2_2);
    vbox1_3_2->addWidget(label3_3_2);
    vbox1_3_2->addWidget(label3_4_2);
    vbox1_3_2->addWidget(label3_5_2);
    vbox1_3_2->addWidget(label3_6_2);
    vbox1_3_2->addWidget(label3_7_2);

    vbox1->addLayout(hbox1);
    vbox1->setStretch(0,1);
    vbox1->setStretch(1,3);
    vbox1->setContentsMargins(100,60,100,40);

    hbox1->addLayout(vbox1_1);
    hbox1->addLayout(vbox1_1_2);
    hbox1->addLayout(vbox1_2);
    hbox1->addLayout(vbox1_2_2);
    hbox1->addLayout(vbox1_3);
    hbox1->addLayout(vbox1_3_2);




    vbox2 = new QVBoxLayout;
    label2 = new QLabel("参数设置");
    label4_1 = new QLabel("运动");
    label4_2 = new QLabel("最大速度：");
    label4_3 = new QLabel("最大加速度：");
    label4_4 = new QLabel("最大角速度：");
    label4_5 = new QLabel("最大角加速度：");
    label4_6 = new QLabel(" ");
    label4_7 = new QLabel(" ");
    label4_8 = new QLabel(" ");

    label5_1 = new QLabel("状态命令");
    label5_2 = new QLabel("版本号设置：");
    label5_3 = new QLabel("优先级设置：");
    label5_4 = new QLabel("任务设置：");
    label5_5 = new QLabel("顶升设置：");
    label5_6 = new QLabel("托盘设置：");
    label5_7 = new QLabel("Led开关：");
    label5_8 = new QLabel("照明开关：");


    label6_1 = new QLabel("结构");
    label6_2 = new QLabel("轮间距：");
    label6_3 = new QLabel("轮半径：");
    label6_4 = new QLabel("减速比：");
    label6_5 = new QLabel("电机分辨率：");
    label6_6 = new QLabel(" ");
    label6_7 = new QLabel(" ");
    label6_8 = new QLabel(" ");

    label7_1 = new QLabel("灯设置");
    label7_2 = new QLabel("Led灯控颜色设置：");
    label7_3 = new QLabel("Led闪烁频率设置：");
    label7_4 = new QLabel("Led亮度设置：");
    label7_5 = new QLabel("补光灯亮度：");
    label7_6 = new QLabel("托盘设置：");
    label7_7 = new QLabel("闪烁频率：");
    label7_8 = new QLabel("照明灯亮度：");

    label4_1_2 = new QLabel(" ");
    label4_2_2 = new QLabel(" ");
    label4_3_2 = new QLabel(" ");
    label4_4_2 = new QLabel(" ");
    label4_5_2 = new QLabel(" ");
    label4_6_2 = new QLabel(" ");
    label4_7_2 = new QLabel(" ");
    label4_8_2 = new QLabel(" ");

    label5_1_2 = new QLabel(" ");
    label5_2_2 = new QLabel(" ");
    label5_3_2 = new QLabel(" ");
    label5_4_2 = new QLabel(" ");
    label5_5_2 = new QLabel(" ");
    label5_6_2 = new QLabel(" ");
    label5_7_2 = new QLabel(" ");
    label5_8_2 = new QLabel(" ");


    label6_1_2 = new QLabel(" ");
    label6_2_2 = new QLabel(" ");
    label6_3_2 = new QLabel(" ");
    label6_4_2 = new QLabel(" ");
    label6_5_2 = new QLabel(" ");
    label6_6_2 = new QLabel(" ");
    label6_7_2 = new QLabel(" ");
    label6_8_2 = new QLabel(" ");

    label7_1_2 = new QLabel(" ");
    label7_2_2 = new QLabel(" ");
    label7_3_2 = new QLabel(" ");
    label7_4_2 = new QLabel(" ");
    label7_5_2 = new QLabel(" ");
    label7_6_2 = new QLabel(" ");
    label7_7_2 = new QLabel(" ");
    label7_8_2 = new QLabel(" ");


    vbox2->addWidget(label2);

    hbox2 =new QHBoxLayout;
    vbox2_1 = new QVBoxLayout;
    vbox2_1->addWidget(label4_1);
    vbox2_1->addWidget(label4_2);
    vbox2_1->addWidget(label4_3);
    vbox2_1->addWidget(label4_4);
    vbox2_1->addWidget(label4_5);
    vbox2_1->addWidget(label4_6);
    vbox2_1->addWidget(label4_7);
    vbox2_1->addWidget(label4_8);

    vbox2_1_2 = new QVBoxLayout;
    vbox2_1_2->addWidget(label4_1_2);
    vbox2_1_2->addWidget(label4_2_2);
    vbox2_1_2->addWidget(label4_3_2);
    vbox2_1_2->addWidget(label4_4_2);
    vbox2_1_2->addWidget(label4_5_2);
    vbox2_1_2->addWidget(label4_6_2);
    vbox2_1_2->addWidget(label4_7_2);
    vbox2_1_2->addWidget(label4_8_2);

    vbox2_2 = new QVBoxLayout;
    vbox2_2->addWidget(label5_1);
    vbox2_2->addWidget(label5_2);
    vbox2_2->addWidget(label5_3);
    vbox2_2->addWidget(label5_4);
    vbox2_2->addWidget(label5_5);
    vbox2_2->addWidget(label5_6);
    vbox2_2->addWidget(label5_7);
    vbox2_2->addWidget(label5_8);

    vbox2_2_2 = new QVBoxLayout;
    vbox2_2_2->addWidget(label5_1_2);
    vbox2_2_2->addWidget(label5_2_2);
    vbox2_2_2->addWidget(label5_3_2);
    vbox2_2_2->addWidget(label5_4_2);
    vbox2_2_2->addWidget(label5_5_2);
    vbox2_2_2->addWidget(label5_6_2);
    vbox2_2_2->addWidget(label5_7_2);
    vbox2_2_2->addWidget(label5_8_2);

    vbox2_3 = new QVBoxLayout;
    vbox2_3->addWidget(label6_1);
    vbox2_3->addWidget(label6_2);
    vbox2_3->addWidget(label6_3);
    vbox2_3->addWidget(label6_4);
    vbox2_3->addWidget(label6_5);
    vbox2_3->addWidget(label6_6);
    vbox2_3->addWidget(label6_7);
    vbox2_3->addWidget(label6_8);

    vbox2_3_2 = new QVBoxLayout;
    vbox2_3_2->addWidget(label6_1_2);
    vbox2_3_2->addWidget(label6_2_2);
    vbox2_3_2->addWidget(label6_3_2);
    vbox2_3_2->addWidget(label6_4_2);
    vbox2_3_2->addWidget(label6_5_2);
    vbox2_3_2->addWidget(label6_6_2);
    vbox2_3_2->addWidget(label6_7_2);
    vbox2_3_2->addWidget(label6_8_2);

    vbox2_4 = new QVBoxLayout;
    vbox2_4->addWidget(label7_1);
    vbox2_4->addWidget(label7_2);
    vbox2_4->addWidget(label7_3);
    vbox2_4->addWidget(label7_4);
    vbox2_4->addWidget(label7_5);
    vbox2_4->addWidget(label7_6);
    vbox2_4->addWidget(label7_7);
    vbox2_4->addWidget(label7_8);

    vbox2_4_2 = new QVBoxLayout;
    vbox2_4_2->addWidget(label7_1_2);
    vbox2_4_2->addWidget(label7_2_2);
    vbox2_4_2->addWidget(label7_3_2);
    vbox2_4_2->addWidget(label7_4_2);
    vbox2_4_2->addWidget(label7_5_2);
    vbox2_4_2->addWidget(label7_6_2);
    vbox2_4_2->addWidget(label7_7_2);
    vbox2_4_2->addWidget(label7_8_2);

    hbox2->addLayout(vbox2_1);
    hbox2->addLayout(vbox2_1_2);
    hbox2->addLayout(vbox2_2);
    hbox2->addLayout(vbox2_2_2);
    hbox2->addLayout(vbox2_3);
    hbox2->addLayout(vbox2_3_2);
    hbox2->addLayout(vbox2_4);
    hbox2->addLayout(vbox2_4_2);

    vbox2->addLayout(hbox2);
    vbox2->setStretch(0,1);
    vbox2->setStretch(1,3);
    vbox2->setContentsMargins(100,0,100,0);


//    vbox3->addLayout(grid2);
    grid2 = new QGridLayout;

    label8_1 = new QLabel("");
    label8_2 = new QLabel("上");
    label8_3 = new QLabel("");
    label8_4 = new QLabel("左");
    label8_5 = new QLabel("");
    label8_6 = new QLabel("右");
    label8_7 = new QLabel("");
    label8_8 = new QLabel("下");
    label8_9 = new QLabel("");
    label8_2->setAlignment(Qt::AlignCenter);
    label8_4->setAlignment(Qt::AlignCenter);
    label8_6->setAlignment(Qt::AlignCenter);
    label8_8->setAlignment(Qt::AlignCenter);

    grid2->addWidget(label8_1,0,0);
    grid2->addWidget(label8_2,0,1);
    grid2->addWidget(label8_3,0,2);

    grid2->addWidget(label8_4,1,0);
    grid2->addWidget(label8_5,1,1);
    grid2->addWidget(label8_6,1,2);

    grid2->addWidget(label8_7,2,0);
    grid2->addWidget(label8_8,2,1);
    grid2->addWidget(label8_9,2,2);
    grid2->setContentsMargins(350, 100, 350, 100);
    vbox->addLayout(vbox1);
    vbox->addLayout(vbox2);
    vbox->addLayout(grid2,2);

    labelVideo = new QLabel(this);
    timeVideo = new QTimer(this);
    cap.open(-1);
    timeVideo->start(50);
    connect(timeVideo,SIGNAL(timeout()),this,SLOT(readFrame()));
    vbox->addWidget(labelVideo);

    widget->setLayout(vbox);
    setPalette(QPalette(Qt::darkGray));
    setAutoFillBackground(true);
    resize(900,900);

}

MainWindow::~MainWindow()
{

  delete ui;
}

void MainWindow::topicCallback(const std_msgs::String::ConstPtr &msg) const{
    String a;
    a=(*msg).data;
    cout<<(*msg).data<<endl;
    QString qStr;
    qStr = QString::fromStdString(a);
    label1_3_2->setText(qStr);

}


void MainWindow::updateTime() const
{
    label1_1_2->setText(QDateTime::currentDateTime().toString("hh:mm:ss"));
//    QString()::number( int num).
}
int i=0;
void MainWindow::updateNum() const
{
    if(i<500) {
        i+=1;
        label1_2_2->setNum(i);

    }
}


void MainWindow::readFrame()
{
    int dst_h = 300;
    int dst_w = 400;
    cv::Size dsize(dst_w, dst_h);
    cap.read(src_image);
    cv::resize(src_image,src_image,dsize, cv::INTER_AREA);
    imag_null = QImage((const uchar*)src_image.data,src_image.cols,src_image.rows,QImage::Format_RGB888).rgbSwapped();
    labelVideo -> setPixmap(QPixmap::fromImage(imag_null));
}


void MainWindow::onUpdate() {
    ros::spinOnce();
    update();

    if (!ros::ok()) {
        close();
    }
}


